package org.ansj.solr;

import java.io.IOException;
import java.io.Reader;

import org.ansj.domain.Term;
import org.ansj.splitWord.Analysis;
import org.ansj.splitWord.analysis.ToAnalysis;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;

public class ANSJTokenizer extends Tokenizer {

    Analysis udf;
    private CharTermAttribute termAtt;
    private OffsetAttribute offsetAtt;
    private TypeAttribute typeAtt;

    protected ANSJTokenizer(Reader input) {
        super(input);
        termAtt = (CharTermAttribute) addAttribute(CharTermAttribute.class);
        offsetAtt = (OffsetAttribute) addAttribute(OffsetAttribute.class);
        typeAtt = (TypeAttribute) addAttribute(TypeAttribute.class);
    }

    @Override
    public void reset() throws IOException {
        super.reset();
        udf = new ToAnalysis(input);
    }

    @Override
    public boolean incrementToken() throws IOException {
        clearAttributes();
        Term term = udf.next();

        if (term != null) {
            termAtt.copyBuffer(term.getName().toCharArray(), 0, term.getName().length());
            //offsetAtt.setOffset(term.getOffe(), term.getTo().getOffe());
            offsetAtt.setOffset(term.getOffe(), term.getToValue());
            typeAtt.setType("word");
            return true;
        } else {
            end();
            return false;
        }
    }
}